package TP2.pruebas;

import java.awt.Point;
import junit.framework.*;
import TP2.modelo.*;

public class ColisionMunicionEnemigaAvionJugadorTest extends TestCase{
	
	
	public void testColisionLaserEnemigoContraAvionJugador(){
		
		Algo42 algo42;
		Avioneta avioneta;
		Municion unaMunicion;
		Escenario escenario;
		
		escenario = Escenario.getInstancia();
		escenario.limpiarInstancia();
		
		algo42 = new Algo42();
		avioneta = new Avioneta();
		
		//Los posicionamos enfrentados
		Point puntoAux = new Point(25, 25);
		algo42.setPosicion(puntoAux);
		puntoAux.setLocation(25, 36);
		avioneta.setPosicion(puntoAux);
		
		//Hacemos disparar la avioneta para producir la colision
		avioneta.disparar();
		unaMunicion = (escenario.getDisparosEnemigosEnJuego()).get(0);
		puntoAux.setLocation(25, 18);
		assertTrue((unaMunicion.getPosicion()).equals(puntoAux));
		unaMunicion.vivir();
		unaMunicion.vivir();
		puntoAux.setLocation(25, 6);
		assertTrue((unaMunicion.getPosicion()).equals(puntoAux));
		
		//Verificamos que todos esten sanos antes del choque y provocamos la colison
		assertTrue(algo42.getNivelDeVida() == 1000);
		assertTrue(avioneta.getNivelDeVida() == 10);
		assertTrue(unaMunicion.estaDestruido() == false);
		
		algo42.colisionarConMunicion(unaMunicion);
		unaMunicion.colisionarConAvion(algo42);
		
		//Verificamos que ambos no esten destruidos y que el algo42 haya perdido vida
		assertTrue(algo42.getNivelDeVida() == 990);
		assertTrue(avioneta.getNivelDeVida() == 10);
		assertTrue(unaMunicion.estaDestruido() == true);
		
		escenario.limpiarInstancia();	
		
		
	}


	
	
	public void testColisionTorpedoAdaptableEnemigoContraAvionJugador(){
		
		Algo42 algo42;
		AvionCazaEspecial cazaEspecial;
		Municion unaMunicion;
		Escenario escenario;

		escenario = Escenario.getInstancia();
		escenario.limpiarInstancia();

		algo42 = new Algo42();
		cazaEspecial = new AvionCazaEspecial();

		//Los posicionamos enfrentados
		Point puntoAux = new Point(25, 25);
		algo42.setPosicion(puntoAux);
		puntoAux.setLocation(25, 36);
		cazaEspecial.setPosicion(puntoAux);
		escenario.agregarAvionDelJugador(algo42);
	

		//Hacemos disparar al caza para producir la colision
		cazaEspecial.disparar();
	
		unaMunicion = (escenario.getDisparosEnemigosEnJuego()).get(0); 
		puntoAux.setLocation(25, 18);
		assertTrue((unaMunicion.getPosicion()).equals(puntoAux));
		unaMunicion.vivir();
		unaMunicion.vivir();
		puntoAux.setLocation(25, 6);
		assertTrue((unaMunicion.getPosicion()).equals(puntoAux));

		//Verificamos que todos esten sanos antes del choque y provocamos la colision.
		assertTrue(algo42.getNivelDeVida() == 1000);
		assertTrue(cazaEspecial.getNivelDeVida() == 30);
		assertTrue(unaMunicion.estaDestruido() == false);

		algo42.colisionarConMunicion(unaMunicion);
		unaMunicion.colisionarConAvion(algo42);

		//Verificamos que ambos no esten destruidos y que el algo42 haya perdido vida.
		assertTrue(algo42.getNivelDeVida() == 500);
		assertTrue(cazaEspecial.getNivelDeVida() == 30);
		assertTrue(unaMunicion.estaDestruido() == true);

		//Simulamos que vuelve a recibir un disparo.
		
		algo42.colisionarConMunicion(unaMunicion);
		unaMunicion.colisionarConAvion(algo42);

		//Verificamos que ambos no esten destruidos y que el algo42 haya perdido vida.
		assertTrue(algo42.getNivelDeVida() == 250);
		assertTrue(cazaEspecial.getNivelDeVida() == 30);
		
		//Y nuevamente lo hacemos chocar.
		
		algo42.colisionarConMunicion(unaMunicion);
		unaMunicion.colisionarConAvion(algo42);

		//Verificamos que ambos no esten destruidos y que el algo42 haya perdido vida.
		assertTrue(algo42.getNivelDeVida() == 125);
		assertTrue(cazaEspecial.getNivelDeVida() == 30);
		
		
		escenario.limpiarInstancia();	


	}
	
	
	
}
